﻿// 5382. 最多的布丁.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>


/*
https://www.acwing.com/problem/content/5385/

农夫约翰的 k
 头奶牛围成一圈，顺时针依次编号为 1∼k
。

其中，贝茜为 1
 号奶牛。

约翰准备了 n
 个美味的布丁，他正打算将布丁分发给这些奶牛。

分发规则如下：

分发开始前，约翰需要确定一个单次发放数量 x
。
分发开始后，约翰会从贝茜（即 1
 号奶牛）开始，按照顺时针顺序逐个给奶牛们分发布丁。
每当轮到一头奶牛时，约翰会给其分发 x
 个布丁。
分发将一圈接着一圈地不断循环进行，直到剩余布丁数量不足 x
 个为止。此时，剩余的布丁会被约翰拿走，不会分发给任何奶牛。
约翰必须保证 x
 不得大于 M
。
约翰必须保证任何奶牛分得布丁的次数都不得超过 D
 次。
所有奶牛当中，约翰最喜欢贝茜，他希望通过合理设定 x
，使得在遵守分发规则的前提下，贝茜能够得到的布丁数量尽可能大。

请你计算并输出贝茜能够得到的布丁的最大可能数量。

输入格式
共一行，包含四个整数 n,k,M,D
。

输出格式
一个整数，表示贝茜能够得到的布丁的最大可能数量。

数据保证一定有解。

数据范围
前 3
 个测试点满足 2≤n≤100
。
所有测试点满足 2≤n≤1018
，2≤k≤n
，1≤M≤n
，1≤D≤min(n,1000)
，M×D×k≥n
。

输入样例1：
20 4 5 2
输出样例1：
8
输入样例2：
30 9 4 1
输出样例2：
4
*/
int main()
{
    std::cout << "Hello World!\n";
}

 